package top.z.work.module.system.convert;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import top.z.work.framework.common.pojo.PageInfo;
import top.z.work.module.system.controller.role.vo.SystemRoleCreateVO;
import top.z.work.module.system.controller.role.vo.SystemRoleModifyVO;
import top.z.work.module.system.controller.role.vo.SystemRoleRelateRouteVO;
import top.z.work.module.system.controller.role.vo.SystemRoleVO;
import top.z.work.module.system.entity.SystemRole;
import top.z.work.module.system.entity.SystemRoute;

import java.util.List;

@Mapper
public interface SystemRoleConvert {

    SystemRoleConvert INSTANCE = Mappers.getMapper(SystemRoleConvert.class);

    default QueryWrapper convert(SystemRoleVO data) {
        return QueryChain.of(SystemRoute.class)
                .eq(SystemRole::getIdentity, data.getIdentity())
                .eq(SystemRole::getName, data.getName())
                .eq(SystemRole::getCode, data.getCode())
                .eq(SystemRole::getSort, data.getSort())
                .eq(SystemRole::getScope, data.getScope())
                ;
    }

    SystemRoleVO convert(SystemRole systemRole);

    SystemRole convert(SystemRoleModifyVO data);

    SystemRole convert(SystemRoleCreateVO data);

    List<SystemRoleVO> convert(List<SystemRole> list);

    default PageInfo<SystemRoleVO> convert(Page<SystemRole> page) {
        List<SystemRoleVO>     list     = page.getRecords().stream().map(this::convert).toList();
        PageInfo<SystemRoleVO> pageInfo = new PageInfo<>();
        pageInfo.setList(list);
        pageInfo.setTotal(page.getTotalRow());
        pageInfo.setSize(page.getPageSize());
        pageInfo.setPage(page.getPageNumber());
        return pageInfo;
    }

    SystemRoleRelateRouteVO convert(SystemRoute data);

}
